package 滑动窗口And双指针.双指针;

/**
 * @author aodre , QQ : 480029069
 * @date 2022/12/17 13:06
 */
public class leetcode1764问题分析型 {



    public static boolean solution(int groups[][] ,int nums[]){
        int index = 0;
        int i;
        for( i = 0;i < groups.length;){
            if((index = findGroupI(groups[i],index,nums)) != -1){
                i++;
                continue;
            }
            return false;
        }

        return true;
    }
/*
    下面这个 函数的 功能就是
    在 nums[] 数组中找到 一个 连续的 子数组 使 其 于 group[] 数组的 值全部相等,返回 相等的 end 下标
    你发现这有点类似于 , kmp 思想
    下面的方式可以使用  kmp 的思想来实现!
 */
    private static int findGroupI(int[] group, int index,int nums[]) {
        if(index + group.length > nums.length)
            return  - 1;
        int i = 0 , j = index,p = index;
        while(i <group.length && j < nums.length){
            if(nums[j] != group[i]){
                /*
                  或者这样写
                  j = j - i + 1
                  i = 0
                  等效于下面的 写法,并且少用了一个变量
                 */
                i = 0;
                p++;
                j = p;
            }
            else{
                i++;
                j++;
            }
        }
        return i == group.length ? j : -1;
    }

    public static void main(String[] args) {
        int nums[] = {21,22,21,22,21,22,21,30};
//        int nums[] = {2,0,-2,5,-1,2,4,3,4,-5,-5};
        int groups [][] = {{21,22,21,22,21,30}};
//        int groups [][] = {{-5,0}};
        boolean solution = solution(groups, nums);
        System.out.println(solution);
    }

}
